home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / news / inn1.000 / inn1.4sec-linux-src.tar / inn / installit.sh < prev    next >
Linux/UNIX/POSIX Shell Script  |  1993-01-29  |  4KB  |  246 lines

  1. #! /bin/sh
  2. ##  $Revision: 1.8 $
  3. ##  A script to install files and directories.
  4.  
  5. PROGNAME=`basename $0`
  6.  
  7. ##  Paths to programs.  CHOWN and WHOAMI are checked below.
  8. CHOWN=chown
  9. CHGRP=chgrp
  10. CHMOD=chmod
  11. CP=cp
  12. LN=ln
  13. MKDIR=mkdir
  14. MV=mv
  15. RM=rm
  16. STRIP=strip
  17. WHOAMI=whoami
  18.  
  19. ##  Some systems don't support -x, so we have to use -f.
  20. if [ ${CHOWN} = chown ] ; then
  21.     if [ -f /etc/chown ] ; then
  22.     CHOWN=/etc/chown
  23.     else
  24.     if [ -f /usr/etc/chown ] ; then
  25.         CHOWN=/usr/etc/chown
  26.     fi
  27.     fi
  28. fi
  29.  
  30. if [ ${WHOAMI} = whoami ] ; then
  31.     if [ -f /usr/ucb/whoami ] ; then
  32.     WHOAMI=/usr/ucb/whoami
  33.     fi
  34. fi
  35.  
  36. ##  Defaults.
  37. CHOWNIT=false
  38. CHGROUPIT=false
  39. CHMODIT=false
  40. STRIPIT=false
  41. BACKIT=false
  42. TOUCHIT=true
  43. ROOT=unknown
  44.  
  45. ##  Process JCL.
  46. MORETODO=true
  47. while ${MORETODO} ; do
  48.     case X"$1" in
  49.     X-b)
  50.     BACKIT=true
  51.     BACKUP="$2"
  52.     shift
  53.     ;;
  54.     X-b*)
  55.     BACKIT=true
  56.     BACKUP=`expr "$1" : '-b\(.*\)'`
  57.     ;;
  58.     X-g)
  59.     GROUP="$2"
  60.     CHGROUPIT=true
  61.     shift
  62.     ;;
  63.     X-g*)
  64.     GROUP=`expr "$1" : '-g\(.*\)'`
  65.     CHGROUPIT=true
  66.     ;;
  67.     X-G)
  68.     case ${ROOT} in
  69.     unknown)
  70.         case `${WHOAMI}` in
  71.         root)
  72.         ROOT=true
  73.         ;;
  74.         *)
  75.         ROOT=false
  76.         ;;
  77.         esac
  78.         ;;
  79.     esac
  80.     GROUP="$2"
  81.     shift
  82.     ${ROOT} && CHGROUPIT=true
  83.     ;;
  84.     X-G*)
  85.     case ${ROOT} in
  86.     unknown)
  87.         case `${WHOAMI}` in
  88.         root)
  89.         ROOT=true
  90.         ;;
  91.         *)
  92.         ROOT=false
  93.         ;;
  94.         esac
  95.         ;;
  96.     esac
  97.     if ${ROOT} ; then
  98.         GROUP=`expr "$1" : '-g\(.*\)'`
  99.         CHGROUPIT=true
  100.     fi
  101.     ;;
  102.     X-m)
  103.     MODE="$2"
  104.     CHMODIT=true
  105.     shift
  106.     ;;
  107.     X-m*)
  108.     MODE=`expr "$1" : '-m\(.*\)'`
  109.     CHMODIT=true
  110.     ;;
  111.     X-n)
  112.     TOUCHIT=false
  113.     ;;
  114.     X-o)
  115.     OWNER="$2"
  116.     CHOWNIT=true
  117.     shift
  118.     ;;
  119.     X-o*)
  120.     OWNER=`expr "$1" : '-o\(.*\)'`
  121.     CHOWNIT=true
  122.     ;;
  123.     X-O)
  124.     case ${ROOT} in
  125.     unknown)
  126.         case `${WHOAMI}` in
  127.         root)
  128.         ROOT=true
  129.         ;;
  130.         *)
  131.         ROOT=false
  132.         ;;
  133.         esac
  134.         ;;
  135.     esac
  136.     OWNER="$2"
  137.     shift
  138.     ${ROOT} && CHOWNIT=true
  139.     ;;
  140.     X-O*)
  141.     case ${ROOT} in
  142.     unknown)
  143.         case `${WHOAMI}` in
  144.         root)
  145.         ROOT=true
  146.         ;;
  147.         *)
  148.         ROOT=false
  149.         ;;
  150.         esac
  151.         ;;
  152.     esac
  153.     if ${ROOT} ; then
  154.         OWNER=`expr "$1" : '-o\(.*\)'`
  155.         CHOWNIT=true
  156.     fi
  157.     ;;
  158.     X-s)
  159.     STRIPIT=true
  160.     ;;
  161.     X--)
  162.     shift
  163.     MORETODO=false
  164.     ;;
  165.     X-*)
  166.     echo "${PROGNAME}:  Unknown flag $1" 1>&2
  167.     exit 1
  168.     ;;
  169.     *)
  170.     MORETODO=false
  171.     ;;
  172.     esac
  173.     ${MORETODO} && shift
  174. done
  175.  
  176. ##  Process arguments.
  177. if [ $# -ne 2 ] ; then
  178.     echo "Usage:  ${PROGNAME} [flags] source destination"
  179.     exit 1
  180. fi
  181.  
  182. ##  Making a directory?
  183. if [ X"$1" = X. ] ; then
  184.     DEST="$2"
  185.     if [ ! -d "${DEST}" ] ; then
  186.     ${MKDIR} "${DEST}" || exit 1
  187.     fi
  188.     if ${CHOWNIT} ; then
  189.     ${CHOWN} "${OWNER}" "${DEST}" || exit 1
  190.     fi
  191.     if ${CHGROUPIT} ; then
  192.     ${CHGRP} "${GROUP}" "${DEST}" || exit 1
  193.     fi
  194.     if ${CHMODIT} ; then
  195.     umask 0
  196.     ${CHMOD} "${MODE}"  "${DEST}" || exit 1
  197.     fi
  198.     exit 0
  199. fi
  200.  
  201. ##  Get the destination and a temp file in the destination diretory.
  202. if [ -d "$2" ] ; then
  203.     DEST="$2/$1"
  204.     TEMP="$2/$$.tmp"
  205. else
  206.     DEST="$2"
  207.     TEMP="`expr "$2" : '\(.*\)/.*'`/$$.tmp"
  208. fi
  209.  
  210. ##  If not given the same name, we must try to copy.
  211. if [ X"$1" != X"$2" ] ; then
  212.     if cmp -s "$1" "${DEST}" ; then
  213.     ##  Files are same; touch or not.
  214.     ${TOUCHIT} && touch "${DEST}"
  215.     else
  216.     ##  If destination exists and we wish to backup, link to backup.
  217.     if [ -f "${DEST}" ] ; then
  218.         if ${BACKIT} ; then
  219.         ${RM} -f "${DEST}${BACKUP}"
  220.         ${LN} "${DEST}" "${DEST}${BACKUP}"
  221.         fi
  222.     fi
  223.     ##  Copy source to the right dir, then move to right spot.
  224.     ##  Done in two parts so we can hope for atomicity.
  225.     ${RM} -f "${TEMP}" || exit 1
  226.     ${CP} "$1" "${TEMP}" || exit 1
  227.     ${MV} -f "${TEMP}" "${DEST}" || exit 1
  228.     fi
  229. fi
  230.  
  231. ##  Strip and set the modes.
  232. if ${STRIPIT} ; then
  233.     ${STRIP} "${DEST}" || exit 1
  234. fi
  235. if ${CHOWNIT} ; then
  236.     ${CHOWN} "${OWNER}" "${DEST}" || exit 1
  237. fi
  238. if ${CHGROUPIT} ; then
  239.     ${CHGRP} "${GROUP}" "${DEST}" || exit 1
  240. fi
  241. if ${CHMODIT} ; then
  242.     umask 0
  243.     ${CHMOD} "${MODE}"  "${DEST}" || exit 1
  244. fi
  245. exit 0
  246.